package outline;

import java.awt.BorderLayout;
import java.awt.Dialog;
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import javax.swing.border.EmptyBorder;
// JDialog
// JDialog는 대화상자를 나타냄
// 이것을 이용해서 메세지를 표시하거나
// 사용자 입력을 받을 수 있음

// 대화상자는 modal 또는 modaless 일 수 있음
// modal : 대화상자가 표시된 후 다른 Frame의
// 			사용자 입력을 차단함 
// 		  즉, modal 상자를 닫기 전 까지는
// 		 다른 프레임은 선택받기 어려움
// modaless : 사용자의 입력을 막지 않는 대화 상자
// 			  특정 Frame을 선택하더라도
// 			 다른 Frame도 화면에서 사라지지 않음
// Frame의 일부로 대화상자를 제어하려면
// JDialog 생성자에 JFrame 객체를 매개변수로 넘겨야 함
// 이런경우 Frame이 파괴되면 
// 대화상자도 같이 닫힘

// ModalityType
// 대화상자의 모달속성을 좀더 세밀하게 제어하도록
// 즉,모달 대화상자를 표시할떄 사용자의 입력을
// 어느 범위까지 거부blocking 할것인지 여부 지정
// MODELESS : 단순히 부모 Frame의 제어를 받는
//			    대화상자.사용자의 입력을 받음
// DOCUMENT_MODAL:  모달 대화상자
//					단순히 현재 창만을 대상으로
// 					사용자 입력을 거부함
// APPLICATION_MODAL: 모달 대화상자
//					 	광범위하게 모든 창을 대상으로
// 						사용자 입력을 거부함
public class J11_HelloSwingDialog extends JFrame {

	private JPanel contentPane;

	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					J11_HelloSwingDialog frame = new J11_HelloSwingDialog();
					frame.setVisible(true);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	/**
	 * Create the frame.
	 */
	public J11_HelloSwingDialog() {
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setBounds(100, 100, 450, 300);
		
		JMenuBar menuBar = new JMenuBar();
		setJMenuBar(menuBar);
		
		JMenu mnNewMenu = new JMenu("File(F)");
		menuBar.add(mnNewMenu);
		
		JMenuItem mntmExit = new JMenuItem("exit");
		mnNewMenu.add(mntmExit);
		
		JMenu mnNewMenu_1 = new JMenu("Help(H)");
		menuBar.add(mnNewMenu_1);
		
		JMenuItem mntmProjectInfo = new JMenuItem("project info");
		mntmProjectInfo.addActionListener(
				new MenuActionListener(this));
		mnNewMenu_1.add(mntmProjectInfo);
		
		contentPane = new JPanel();
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		contentPane.setLayout(new BorderLayout(0, 0));
		setContentPane(contentPane);
	}

}
class MenuActionListener implements ActionListener{
	private JFrame p = null;
	public MenuActionListener(JFrame p) {
		this.p = p;
	}

	@Override
	public void actionPerformed(ActionEvent e) {
		new SwingDialog(p);
		JDialog d = new JDialog(
		p, Dialog.ModalityType.MODELESS);
		// Dialog.ModalityType.MODELESS				
		// Dialog.ModalityType.DOCUMENT_MODAL 	//독립적으로 인식	
		// Dialog.ModalityType.APPLICATION_MODAL	// 하나로 인식
		d.setSize(250,250);
		d.setVisible(true);
	}
}
		
class SwingDialog extends JDialog{
	public SwingDialog(JFrame parent) {
		//dialog.setModalityType(
		//		Dialog.ModalityType.APPLICATION_MODAL);
	super(parent, true); 	//부모창과 모달창 여부
	setBounds(300, 300, 250, 120);
	setTitle("Project About");
	//dialog.setVisible(true)
	setVisible(true);
	setVisible(false);
	}
	
}